﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Collections;
using SistemaGO_Library.Entidades.Ocorrencia;
using SistemaGO_Library;

namespace SistemaGO_Desktop.Visao.Telas
{
    public partial class frmAdicionarOcorrencia : Form
    {
        private static frmAdicionarOcorrencia instancia = null;
        Ocorrencia oco = new Ocorrencia();
        private Fachada fachada = Fachada.getInstance();
        ArrayList arrayTbs, arrayCbs, arrayMtbs;
        bool flag = false;
        bool flag2 = false;
        bool flag3 = false;

        private frmAdicionarOcorrencia() {
            InitializeComponent();
            tbAdicionarAvRuaOcorrencia.Focus();
            tbAdicionarCodigoOcorrencia.Text = fachada.buscarCodigoOcorrencia().ToString();
            cbAdicionarCategoriaOcorrencia.Items.AddRange(fachada.buscarNomesCategorias());

            arrayTbs = new ArrayList();
            arrayCbs = new ArrayList();
            arrayMtbs = new ArrayList();
            arrayTbs.Add(tbAdicionarAvRuaOcorrencia);
            arrayCbs.Add(cbAdicionarBairroOcorrencia);
            arrayTbs.Add(tbAdicionarPontoDeReferenciaOcorrencia);
            arrayMtbs.Add(mtbAdicionarCepOcorrencia);
            arrayTbs.Add(tbAdicionarNomeOcorrencia);
            arrayTbs.Add(tbAdicionarEmailOcorrencia);
            arrayMtbs.Add(mtbAdicionarCelularOcorrencia);
            arrayCbs.Add(cbAdicionarCategoriaOcorrencia);            
        }
        
        public static frmAdicionarOcorrencia getInstance() {
            if (instancia == null) {
                instancia = new frmAdicionarOcorrencia();
            } else {
                instancia.Focus();
            }
            return instancia;
        }

        private void limparTela() {
            tbAdicionarAvRuaOcorrencia.Text = "";
            cbAdicionarBairroOcorrencia.Text = "Selecione";
            tbAdicionarPontoDeReferenciaOcorrencia.Text = "";
            mtbAdicionarCepOcorrencia.Text = "";
            pbAdicionarImagemOcorrencia.Image = SistemaGO_Desktop.Properties.Resources.AdicionarOcorrenciaImagem;
            pbAdicionarImagemOcorrencia.SizeMode = PictureBoxSizeMode.CenterImage;
            tbAdicionarNomeOcorrencia.Text = "";
            tbAdicionarEmailOcorrencia.Text = "";
            mtbAdicionarCelularOcorrencia.Text = "";
            cbAdicionarCategoriaOcorrencia.Text = "Selecione";
            rbAdicionarEnvioEmailOcorrencia.Checked = true;
            rbAdicionarEnvioCelularOcorrencia.Checked = false;
        }

        private void isEmptyTb(ArrayList tb)
        {
            for (int i = 0; i < tb.Count; i++)
            {
                if (((TextBox)tb[i]).Text.Trim().Equals(""))
                {
                    MessageBox.Show("Campo " + ((TextBox)tb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((TextBox)tb[i]).Focus();
                    flag = true;
                    return;
                }
            }
            flag = false;
        }

        private void isEmptyCb(ArrayList cb)
        {
            for (int i = 0; i < cb.Count; i++)
            {
                if (((ComboBox)cb[i]).Text.Equals("Selecione"+""))
                {
                    MessageBox.Show("Campo " + ((ComboBox)cb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((ComboBox)cb[i]).Focus();
                    flag2 = true;
                    return;
                }
            }
            flag2 = false;
        }

        private void isEmptyMtb(ArrayList mtb)
        {
            for (int i = 0; i < mtb.Count; i++)
            {
                if (((MaskedTextBox)mtb[i]).Text.Equals(""))
                {
                    MessageBox.Show("Campo " + ((MaskedTextBox)mtb[i]).Tag + " obrigatório!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    ((MaskedTextBox)mtb[i]).Focus();
                    flag3 = true;
                    return;
                }
            }
            flag3 = false;
        }

        private void btAdicionarImagemOcorrencia_Click(object sender, EventArgs e) {
            if(ofdAdicionarImagemOcorrencia.ShowDialog() == DialogResult.OK) {
                pbAdicionarImagemOcorrencia.Image = Image.FromFile(ofdAdicionarImagemOcorrencia.FileName);
                pbAdicionarImagemOcorrencia.SizeMode = PictureBoxSizeMode.StretchImage;
            }
        }

        private void btAdicionarOcorrencia_Click(object sender, EventArgs e) {
            isEmptyTb(arrayTbs);            
            if (!flag)
            {
                isEmptyCb(arrayCbs);
                if (!flag2)
                {
                    isEmptyMtb(arrayMtbs);
                    if (!flag3)
                    {
                        oco.Ocorrencia_cod = int.Parse(tbAdicionarCodigoOcorrencia.Text);
                        oco.Categoria_cod = fachada.buscarCodigoCategoriaPorNome(cbAdicionarCategoriaOcorrencia.Text);
                        oco.Ocorrencia_av_rua = tbAdicionarAvRuaOcorrencia.Text;
                        oco.Ocorrencia_bairro = cbAdicionarBairroOcorrencia.Text;
                        oco.Ocorrencia_ponto_ref = tbAdicionarPontoDeReferenciaOcorrencia.Text;
                        oco.Ocorrencia_cep = mtbAdicionarCepOcorrencia.Text;
                        oco.Denunciante_nome = tbAdicionarNomeOcorrencia.Text;
                        oco.Denunciante_email = tbAdicionarEmailOcorrencia.Text;
                        oco.Denunciante_celular = mtbAdicionarCelularOcorrencia.Text;
                        if (rbAdicionarEnvioCelularOcorrencia.Checked)
                        {
                            oco.Ocorrencia_envio = "C";
                        }
                        else
                        {
                            oco.Ocorrencia_envio = "E";
                        }
                        oco.Ocorrencia_imagem = "C:\\Ocorrencias\\Ocorrencia" + tbAdicionarCodigoOcorrencia.Text + ".png";
                        oco.Ocorrencia_data_cadastro = DateTime.Now;
                        oco.Ocorrencia_situacao = "R";
                        try
                        {
                            fachada.inserirOcorrencia(oco);
                            pbAdicionarImagemOcorrencia.Image.Save("C:\\Ocorrencias\\Ocorrencia" + tbAdicionarCodigoOcorrencia.Text + ".png");
                            MessageBox.Show("Ocorrência cadastrada com sucesso", "Cadastro Realizado", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            limparTela();
                            tbAdicionarCodigoOcorrencia.Text = fachada.buscarCodigoOcorrencia().ToString();
                            tbAdicionarCodigoOcorrencia.Focus();
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                }
            }
        }

        private void btLimparOcorrencia_Click(object sender, EventArgs e) {
            DialogResult resultado = MessageBox.Show("Você tem certeza que quer limpar a tela?", "Limpar Tela", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (resultado == System.Windows.Forms.DialogResult.Yes) {
                limparTela();
                tbAdicionarAvRuaOcorrencia.Focus();
            }
        }

        private void frmAdicionarOcorrencia_FormClosing(object sender, FormClosingEventArgs e) {
            frmAdicionarOcorrencia.instancia = null;
        }

        private void cbAdicionarBairroOcorrencia_Leave(object sender, EventArgs e)
        {
            if (cbAdicionarBairroOcorrencia.Text.Equals(""))
            {
                cbAdicionarBairroOcorrencia.Text = "Selecione";
            }
        }

        private void cbAdicionarCategoriaOcorrencia_Leave(object sender, EventArgs e)
        {
            if (cbAdicionarCategoriaOcorrencia.Text.Equals(""))
            {
                cbAdicionarCategoriaOcorrencia.Text = "Selecione";
            }
        }
    }
}
